class Student{
    private String name;
    private int age;


    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test {

    public static void main(String[] args) {
        //字符串的截取
        String s = "abcdef";
        //这里如果传入的是0下标 那么默认返回原来的对象 但是如果传入的是其他的对象，
        //此时 返回新的对象
        String ret = s.substring(1);//[1,4)
        System.out.println(ret);

        System.out.println("=========");
        //去除左右两边空格
        String s2 = "   abc   def   ";
        System.out.println(s2);
        //去除 左右两边的空格
        String ret1 = s2.trim();
        System.out.println(ret1);

    }
    public static void main11(String[] args) {
        //多组分割
        String str = "name=zhagnsan&age=10";
        String[] ret = str.split("&");
        for (int i = 0; i < ret.length; i++) {
            //System.out.println(ret[i]);
            String[] ret2 = ret[i].split("=");
            for (int j = 0; j < ret2.length; j++) {
                System.out.println(ret2[j]);
            }
        }

    }
    public static void main10(String[] args) {
         /*String str = "name=zhagnsan&age=10";
        String[] strings = str.split("&|=");//多个字符分割用|
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }*/

        String str3 = "192.168.0.0.1";
        String[] arr = str3.split("\\.");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        String str4 = "192\\168\\0\\0\\1";
        //System.out.println(str2);
        String[] strings = str4.split("\\\\"); //用\\将\\转义
        for (int i = 0; i < strings.length; i++) {
            System.out.print(strings[i]+" ");
        }

        String str = "name=zhagnsan&age=10";
        //分割之后的结果 要存储到 数组当中
      String[] ret = str.split("&");
        for (int i = 0; i < ret.length ; i++) {
            System.out.print(ret[i]+" ");
        }
        System.out.println();

        String str2 = "hello world hello bit";
        //2代表分成两组 遇到第一个空格分成两组
        String[] strings2 = str2.split(" ",2);
        for (int i = 0; i < strings2.length; i++) {
            System.out.println(strings2[i]);
        }
    }
    public static void main9(String[] args) {
        String str = "ababcabcdabcde";
        //把所有的ab替换为 oooo  这个替换也是一样 不是在原来字符串的基础上进行替换 他是产生了新的对象
        String ret = str.replace("ab","oooo");
        System.out.println(ret);
        System.out.println("========");


        //把所有的b替换为 z
        String ret2 = str.replace('b','z');
        System.out.println(ret2);
        System.out.println("========");

        //替换第一个ab为kk
        String ret3 = str.replaceFirst("ab","kk");
        System.out.println(ret3);
        System.out.println("========");

        //替换所有ab为kk
        String ret4 = str.replaceAll("ab","kk");
        System.out.println(ret4);
        System.out.println("========");

        String str5 = "hello 123 world 456";
        // 替换普通字符串
        String result1 = str5.replace("hello", "hi");
        System.out.println(result1);
        // 替换符合正则表达式的部分
        String result2 = str5.replaceAll("\\d+", "NUM");
        System.out.println(result2);

    }
    public static void main8(String[] args) {
        //字符串转换数组 toCharArray()
        String s1 = "hello";
        char[] ch =  s1.toCharArray();
        for (char x:ch) {
            System.out.print(x+" ");
        }
        System.out.println();

        for (int i = 0; i <ch.length ; i++) {
            System.out.print(ch[i]+" ");
        }

        //格式化字符串以指定的形式输出
        String s = String.format("%d-%d-%d", 1999, 9,14);
        System.out.println(s);

    }


    public static void main7(String[] args) {
        String str1 = "hello";
        String ret = str1.toUpperCase();//小写转换大写，他不是在原来的字符串上转换是生成了一个新的对象
        System.out.println(ret);

        String str2 = "HEllo";

        String ret2 = str2.toLowerCase();//大写转换小写
        System.out.println(ret2);
    }

    public static void main6(String[] args) {
        //其他类型转换成字符串 valueOf
        String s1 = String.valueOf(1234);
        String s2 = String.valueOf(12.34);
        String s3 = String.valueOf(true);
        String s4 = String.valueOf(new Student("hz",5));


        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);


        System.out.println("=============");
        //字符串转数字
        int data1 = Integer.parseInt("1234");
        double data2 = Double.parseDouble("12.34");
        System.out.println(data1);
        System.out.println(data2);
    }
    public static void main5(String[] args) {
        String s1 = "abcdef";

        //获取指定位置的字符
        System.out.println(s1.charAt(2));
        //或者定义一个返回值来输出
        char ch = s1.charAt(2);
        System.out.println(ch);


        //查找这个字符第一次出现的位置
        int index = s1.indexOf('c');
        System.out.println(index);

        //查找这个字符串第一次出现的位置
        s1.indexOf("cd");

        //从指定位置开始查找这个字符第一次出现的位置
        s1.indexOf("c",2);

        //从指定位置开始查找这个字符串第一次出现的位置
        s1.indexOf("cd",2);


        System.out.println("=========");
        //从后往前找，和indexof相同有四个方法
        String s2 = "abcdeadadcf";
        int index2 = s2.lastIndexOf('a');
        System.out.println(index2);
    }
    public static void main4(String[] args) {
        String s1 = "Abcd";
        String s2 = "abcd";

        //忽略大小写进行比较
        System.out.println(s1.compareToIgnoreCase(s2));
    }
    public static void main3(String[] args) {
        String s1 = "abcd";
        String s2 = "abcd";

        //str1大于str2 那么 返回正数  如果不大于 返回负数  如果相同 返回0
        System.out.println(s1.compareTo(s2));

        /**
         * 比较逻辑：
         * 1. 如果两个字符串的长度是一样的，那么第一个不一样的字符的大小就是整个字符串的大小
         * 2. 如果两个字符串长度不一样，那么先比较两个长度的差值个
         * 3、在这个差值范围内，有不一样的字符就能比较出来大小
         * 4、但是如果都是一样的，那么就看谁长 谁大 ！
         */

    }

    public static void main2(String[] args) {
        String s1 = new String("world");
        String s2 = new String("world");

        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
        System.out.println("===========");

        String s3 = "hello";
        String s4 = "hello";
        System.out.println(s3 == s4);


    }
    public static void main1(String[] args) {
        //1.使用常量赋值
        String s1 = "hello";
        System.out.println(s1);
        //求字符串长度
        System.out.println(s1.length());
        System.out.println("hello".length());

        //2.new String 对象
        String s2 = new String("world");
        System.out.println(s2);

        //3.使用字符数组进行构造
        char[] array = {'a','b','c'};
        String s3 = new String(array);
        System.out.println(s3);

        System.out.println("===========");

        String s4 = "";//代表字符串为空
        System.out.println(s4.isEmpty());


        String s5 = null;//代表 s5 这个引用不指向任何对象
        //System.out.println(s4.isEmpty());//会发生空指针异常

    }
}
